<template>
  <!-- 学生评价 -->
  <div class="courseIntroduction bg-fff">
    <p class="courseOutline-title">学生评价</p>
    <div class="overallEvaluation w-100 display-flex flex-between">
      <div style="width: calc(100% - 384px)">
        <p>
          <span>当前课程总体评价：</span>
          <span class="color-0F63ED font-size-24">{{
            allscore ? allscore : 0
          }}</span>
          <span class="color-0F63ED font-size-16">分</span>
        </p>
        <div class="evaluationList-box">
          <div
            v-for="(item, index) in evaluationList"
            class="evaluationList display-flex flex-between align-items-center"
            :key="index"
          >
            <span class="color-2F3133 font-size-16">{{ item.name }}</span>
            <div>
              <span class="color-0F63ED font-size-24">{{ item.score }}</span>
              <span class="color-18191A font-size-14 margin-left-10">分</span>
            </div>
          </div>
        </div>
      </div>
      <div id="topRadarMap" style="width: 384px; height: 302px"></div>
    </div>
    <div class="compareBox margin-top-16 w-100">
      <p class="color-18191A font-size-18 margin-bottom-24">课程评价对比分析</p>
      <div class="display-flex">
        <div class="echarts-item text-center">
          <div id="mapOne" style="width: 440px; height: 290px"></div>
          <div class="echarts-score color-fff">
            <span class="font-size-16">全校课程评价平均分：</span>
            <span class="font-size-24">{{ schoolAllscore }}</span>
            <span class="font-size-14">分</span>
            <div class="echarts-schooltag echarts-tag"></div>
          </div>
        </div>
        <div class="echarts-item text-center">
          <div id="mapTwo" style="width: 440px; height: 290px"></div>
          <div class="echarts-score color-fff">
            <span class="font-size-16">本学院课程评价平均分：</span>
            <span class="font-size-24">{{ collegeAllscore }}</span>
            <span class="font-size-14">分</span>
            <div class="echarts-hospitaltag echarts-tag"></div>
          </div>
        </div>
        <div class="echarts-item text-center">
          <div id="mapThree" style="width: 440px; height: 290px"></div>
          <div class="echarts-score color-fff">
            <span class="font-size-16">同课程评价平均分：</span>
            <span class="font-size-24">{{ courseAllscore }}</span>
            <span class="font-size-14">分</span>
            <div class="echarts-coursetag echarts-tag"></div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script lang="ts" setup>
import { ref, onMounted } from 'vue'
import * as echarts from 'echarts'
type EChartsOption = echarts.EChartsOption
const allscore = ref(0) // 当前课程总体分
const schoolAllscore = ref(0) // 全校课程平均分
const collegeAllscore = ref(0) // 学院课程平均分
const courseAllscore = ref(0) // 同课程平均分
const currentEvaluate = ref([])
const schoolEvaluate = ref([])
const collegeEvaluate = ref([])
const courseEvaluate = ref([])
const evaluationList = ref([
  {
    index: 0,
    name: '教学态度',
    score: 0
  },
  {
    index: 1,
    name: '教学组织',
    score: 0
  },
  {
    index: 2,
    name: '教学内容',
    score: 0
  },
  {
    index: 3,
    name: '教学效果',
    score: 0
  },
  {
    index: 4,
    name: '综合评价',
    score: 0
  }
])
onMounted(() => {
  handleEchartsData()
})

// 学生评价-当前课程总体评价雷达图
const indicators = ref([
  { name: '教学态度', max: 100 },
  { name: '教学效果', max: 100 },
  { name: '教学组织', max: 100 },
  { name: '综合评价', max: 100 },
  { name: '教学内容', max: 100 }
])
let myChart: any
let onemyChart: any
let twomyChart: any
let threemyChart: any
const handleEchartsData = () => {
  if (myChart) {
    myChart.dispose() // 销毁旧实例
  }
  if (onemyChart) {
    onemyChart.dispose() // 销毁旧实例
  }
  if (twomyChart) {
    twomyChart.dispose() // 销毁旧实例
  }
  if (threemyChart) {
    threemyChart.dispose() // 销毁旧实例
  }
  // 当前课程总体评价雷达图
  var chartDom = document.getElementById('topRadarMap')!
  myChart = echarts.init(chartDom)
  var option: EChartsOption
  option = {
    radar: {
      indicator: indicators.value,
      radius: '80%',
      axisName: {
        color: '#333',
        fontSize: 12
      },
      axisLine: {
        show: true, // 是否显示轴线（默认 true）
        lineStyle: {
          color: '#fff', // 轴线颜色
          width: 1, // 轴线宽度
          type: 'solid', // 轴线类型（'solid' 实线 / 'dashed' 虚线 / 'dotted' 点线）
          opacity: 1 // 透明度（0~1）
        }
      },
      splitLine: {
        lineStyle: {
          color: '#A3BDFF', // 轴线颜色
          width: 2, // 轴线宽度
          type: 'solid', // 轴线类型（'solid' 实线 / 'dashed' 虚线 / 'dotted' 点线）
          opacity: 1 // 透明度（0~1） }
        }
      },
      splitArea: {
        show: true,
        areaStyle: {
          // 必须是颜色数组，用于交替显示
          color: ['#C8DAFF', '#C8DAFF']
        }
      }
    },
    series: [
      {
        type: 'radar',
        // 禁用所有交互效果
        // silent: true,
        tooltip: {
          trigger: 'item'
        },
        areaStyle: {},
        data: [
          {
            value: currentEvaluate.value,
            itemStyle: { color: '#376DF7' }, // 数据点颜色
            lineStyle: { color: '#376DF7' }, // 线条颜色
            areaStyle: { color: '#9EBBFC' } // 区域填充色
          }
        ]
      }
    ]
  }
  myChart.setOption(option)
  // 全校课程评价平均分雷达图
  var onechartDom = document.getElementById('mapOne')!
  onemyChart = echarts.init(onechartDom)
  var oneoption: EChartsOption
  oneoption = {
    grid: {
      top: '20px', // 上边距
      right: 0, // 右边距
      bottom: 0, // 下边距
      left: 0 // 左边距
    },
    radar: {
      indicator: indicators.value,
      //   center: ['50%', '50%'], // 水平垂直居中
      radius: '70%', // 控制雷达图大小
      axisName: {
        color: 'rgba(0,0,0,0.85)',
        fontSize: 12,
        formatter: (name) => {
          const score =
            schoolEvaluate.value[
              indicators.value.findIndex((item) => item.name === name)
            ]
          // 使用富文本语法
          return `{title|${name}}\n{score|${score ? score : 0}}分`
        },
        rich: {
          title: {
            fontSize: 12,
            color: 'rgba(0,0,0,0.85)'
          },
          score: {
            fontSize: 16,
            fontWeight: 'bold',
            color: 'rgba(0,0,0,0.85)'
            // padding: [2, 1, 2, 2] // 上右下左
          }
        }
      },
      axisLine: {
        show: true, // 是否显示轴线（默认 true）
        lineStyle: {
          color: '#fff', // 轴线颜色
          width: 1, // 轴线宽度
          type: 'solid', // 轴线类型（'solid' 实线 / 'dashed' 虚线 / 'dotted' 点线）
          opacity: 1 // 透明度（0~1）
        }
      },
      splitLine: {
        lineStyle: {
          color: '#00CCC9', // 轴线颜色
          width: 1, // 轴线宽度
          type: 'solid', // 轴线类型（'solid' 实线 / 'dashed' 虚线 / 'dotted' 点线）
          opacity: 1 // 透明度（0~1） }
        }
      },
      splitArea: {
        show: true,
        areaStyle: {
          // 必须是颜色数组，用于交替显示
          color: [
            new echarts.graphic.LinearGradient(0, 0, 0, 1, [
              { offset: 0, color: '#A2F5F3' },
              { offset: 1, color: '#F9FFFB' }
            ]),
            new echarts.graphic.LinearGradient(0, 0, 0, 1, [
              { offset: 0, color: '#A2F5F3' },
              { offset: 1, color: '#F9FFFB' }
            ])
          ]
        }
      }
    },
    series: [
      {
        type: 'radar',
        // 禁用所有交互效果
        // silent: true,
        tooltip: {
          trigger: 'item'
        },
        areaStyle: {},
        data: [
          {
            value: schoolEvaluate.value,
            // name: 'A Software',
            // 统一设置该数据项的颜色
            itemStyle: { color: '#00CCC9' }, // 数据点颜色
            lineStyle: { color: '#00CCC9' }, // 线条颜色
            areaStyle: { color: '#87EBE8' } // 区域填充色
          }
        ]
      }
    ]
  }
  onemyChart.setOption(oneoption)
  // 本学院课程评价平均分雷达图
  var twochartDom = document.getElementById('mapTwo')!
  twomyChart = echarts.init(twochartDom)
  var twooption: EChartsOption
  twooption = {
    radar: {
      indicator: indicators.value,
      //   center: ['50%', '50%'], // 水平垂直居中
      radius: '70%', // 控制雷达图大小
      axisName: {
        color: 'rgba(0,0,0,0.85)',
        fontSize: 12,
        formatter: (name) => {
          const score =
            collegeEvaluate.value[
              indicators.value.findIndex((item) => item.name === name)
            ]
          // 使用富文本语法
          return `{title|${name}}\n{score|${score ? score : 0}}分`
        },
        rich: {
          title: {
            fontSize: 12,
            color: 'rgba(0,0,0,0.85)'
          },
          score: {
            fontSize: 16,
            fontWeight: 'bold',
            color: 'rgba(0,0,0,0.85)'
            // padding: [2, 1, 2, 2] // 上右下左
          }
        }
      },
      axisLine: {
        show: true, // 是否显示轴线（默认 true）
        lineStyle: {
          color: '#fff', // 轴线颜色
          width: 1, // 轴线宽度
          type: 'solid', // 轴线类型（'solid' 实线 / 'dashed' 虚线 / 'dotted' 点线）
          opacity: 1 // 透明度（0~1）
        }
      },
      splitLine: {
        lineStyle: {
          color: '#FF8433', // 轴线颜色
          width: 2, // 轴线宽度
          type: 'solid', // 轴线类型（'solid' 实线 / 'dashed' 虚线 / 'dotted' 点线）
          opacity: 1 // 透明度（0~1） }
        }
      },
      splitArea: {
        show: true,
        areaStyle: {
          // 必须是颜色数组，用于交替显示
          color: [
            new echarts.graphic.LinearGradient(0, 0, 0, 1, [
              { offset: 0, color: '#FFD793' },
              { offset: 1, color: '#FFFDF9' }
            ]),
            new echarts.graphic.LinearGradient(0, 0, 0, 1, [
              { offset: 0, color: '#FFD793' },
              { offset: 1, color: '#FFFDF9' }
            ])
          ]
        }
      }
    },
    series: [
      {
        type: 'radar',
        // 禁用所有交互效果
        // silent: true,
        tooltip: {
          trigger: 'item'
        },
        areaStyle: {},
        data: [
          {
            value: collegeEvaluate.value,
            itemStyle: { color: '#FF8433' }, // 数据点颜色
            lineStyle: { color: '#FF8433' }, // 线条颜色
            areaStyle: { color: '#FFC58A' } // 区域填充色
          }
        ]
      }
    ]
  }
  twomyChart.setOption(twooption)
  // 同课程评价平均分雷达图
  var threechartDom = document.getElementById('mapThree')!
  threemyChart = echarts.init(threechartDom)
  var threeoption: EChartsOption
  threeoption = {
    radar: {
      //   center: ['50%', '50%'], // 水平垂直居中
      radius: '70%', // 控制雷达图大小
      indicator: indicators.value,
      axisName: {
        color: 'rgba(0,0,0,0.85)',
        fontSize: 12,
        formatter: (name) => {
          const score =
            courseEvaluate.value[
              indicators.value.findIndex((item) => item.name === name)
            ]
          // 使用富文本语法
          return `{title|${name}}\n{score|${score ? score : 0}}分`
        },
        rich: {
          title: {
            fontSize: 12,
            color: 'rgba(0,0,0,0.85)'
          },
          score: {
            fontSize: 16,
            fontWeight: 'bold',
            color: 'rgba(0,0,0,0.85)'
            // padding: [2, 1, 2, 2] // 上右下左
          }
        }
      },
      axisLine: {
        show: true, // 是否显示轴线（默认 true）
        lineStyle: {
          color: '#fff', // 轴线颜色
          width: 1, // 轴线宽度
          type: 'solid', // 轴线类型（'solid' 实线 / 'dashed' 虚线 / 'dotted' 点线）
          opacity: 1 // 透明度（0~1）
        }
      },
      splitLine: {
        lineStyle: {
          color: '#FF1F0B', // 轴线颜色
          width: 2, // 轴线宽度
          type: 'solid', // 轴线类型（'solid' 实线 / 'dashed' 虚线 / 'dotted' 点线）
          opacity: 1 // 透明度（0~1） }
        }
      },
      splitArea: {
        show: true,
        areaStyle: {
          // 必须是颜色数组，用于交替显示
          color: [
            new echarts.graphic.LinearGradient(0, 0, 0, 1, [
              { offset: 0, color: '#FFC9CA' },
              { offset: 1, color: '#FFF9F9' }
            ]),
            new echarts.graphic.LinearGradient(0, 0, 0, 1, [
              { offset: 0, color: '#FFC9CA' },
              { offset: 1, color: '#FFF9F9' }
            ])
          ]
        }
      }
    },
    series: [
      {
        type: 'radar',
        // 禁用所有交互效果
        // silent: true,
        tooltip: {
          trigger: 'item'
        },
        areaStyle: {},
        data: [
          {
            value: courseEvaluate.value,
            itemStyle: { color: '#FF1F0B' }, // 数据点颜色
            lineStyle: { color: '#FF1F0B' }, // 线条颜色
            areaStyle: { color: '#FF9F99' } // 区域填充色
          }
        ]
      }
    ]
  }
  threemyChart.setOption(threeoption)
}
</script>

<style lang="scss" scoped>
// 学生评价
.overallEvaluation {
  padding: 24px 120px 24px 32px;
  box-sizing: border-box;
  height: 350px;
  border-radius: 6px 6px 6px 6px;
  border: 1px solid #e9e9e9;
  .evaluationList-box {
    margin-top: 24px;
    overflow: hidden;
    .evaluationList {
      width: 42%;
      height: 44px;
      background: #f9fbff;
      border-radius: 8px;
      border: 1px solid #e6ebf0;
      margin-top: 12px;
      float: left;
      margin-right: 24px;
      padding: 0 32px;
      box-sizing: border-box;
    }
  }
}
.compareBox {
  padding: 24px 32px;
  box-sizing: border-box;
  height: 464px;
  background: #f9fbff;
  border-radius: 6px 6px 6px 6px;
  border: 1px solid #e9e9e9;
  .echarts-item {
    flex: 1;
  }
  .echarts-score {
    width: 376px;
    height: 44px;
    line-height: 40px;
    background: #0f63ed;
    border-radius: 8px;
    margin: 26px auto;
    position: relative;
    .echarts-tag {
      position: absolute;
      top: -4px;
      left: 0;
      background-repeat: no-repeat;
      background-size: 100%;
    }
    .echarts-schooltag {
      width: 54px;
      height: 22px;
      background-image: url('@/assets/images/tag_onthecampus.png');
    }
    .echarts-hospitaltag {
      width: 68px;
      height: 22px;
      background-image: url('@/assets/images/tag_alumniacademy.png');
    }
    .echarts-coursetag {
      width: 68px;
      height: 22px;
      background-image: url('@/assets/images/tag_samecourse.png');
    }
  }
}
.courseIntroduction {
  padding: 64px;
  box-sizing: border-box;
  margin-top: 24px;
  border-radius: 12px;
  .expertReview {
    height: 36vh;
    overflow-y: scroll;
  }
}
.courseOutline-title {
  display: inline-block;
  font-family:
    Alimama ShuHeiTi,
    Alimama ShuHeiTi;
  font-weight: bold;
  font-size: 24px;
  color: #18191a;
  line-height: 30px;
  border-bottom: 2px solid #0f63ed;
  margin-bottom: 40px;
}
</style>
